#!/usr/bin/env python3
"""
工厂生产上传脚本
自动检测设备并上传固件到工厂分区
"""

import sys
import os
import serial
import time
import argparse

def detect_esp32_port():
    """自动检测ESP32设备端口"""
    # 在Linux/Mac上常见的串口设备
    possible_ports = [
        '/dev/ttyUSB0', '/dev/ttyUSB1', '/dev/ttyUSB2',
        '/dev/ttyACM0', '/dev/ttyACM1',
        'COM3', 'COM4', 'COM5', 'COM6'  # Windows
    ]
    
    for port in possible_ports:
        try:
            ser = serial.Serial(port)
            ser.close()
            return port
        except (serial.SerialException, OSError):
            continue
    
    return None

def factory_upload(port, speed, image_path):
    """执行工厂上传"""
    print(f"🔧 开始工厂生产上传...")
    print(f"   设备: {port}")
    print(f"   速度: {speed}")
    print(f"   固件: {os.path.basename(image_path)}")
    
    # 这里可以添加工厂特定的上传逻辑
    # 例如：验证设备、写入序列号、设置生产参数等
    
    # 使用esptool进行上传（示例）
    cmd = f"esptool.py --chip auto --port {port} --baud {speed} --before default_reset write_flash 0x10000 {image_path}"
    
    print(f"📤 执行: {cmd}")
    result = os.system(cmd)
    
    if result == 0:
        print("✅ 工厂上传成功!")
        return True
    else:
        print("❌ 工厂上传失败!")
        return False

def main():
    parser = argparse.ArgumentParser(description='ESP32工厂生产上传工具')
    parser.add_argument('--port', help='串口设备')
    parser.add_argument('--speed', type=int, default=460800, help='上传速度')
    parser.add_argument('--image', required=True, help='固件文件路径')
    
    args = parser.parse_args()
    
    # 自动检测端口
    if not args.port:
        args.port = detect_esp32_port()
        if not args.port:
            print("❌ 未检测到ESP32设备，请手动指定端口")
            sys.exit(1)
    
    # 执行上传
    success = factory_upload(args.port, args.speed, args.image)
    sys.exit(0 if success else 1)

if __name__ == '__main__':
    main()